package com.jacen.fzxs.util;

import java.security.MessageDigest;
import java.util.Random;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 密码加密工具
 * 
 * @author Jacen 2015年4月22日 上午11:00:24
 */
public class MD5 {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = LoggerFactory.getLogger(MD5.class);

	private final static String[] hexDigits = {

	"0", "1", "2", "3", "4", "5", "6", "7",

	"8", "9", "a", "b", "c", "d", "e", "f" };

	/**
	 * 将字节转化为16进制字符串
	 * 
	 * @param b
	 *            字节数组
	 * @return 16进制字符串
	 */

	private static String byteArrayToHexString(byte[] b) {
		StringBuffer resultSb = new StringBuffer();
		for (int i = 0; i < b.length; i++) {
			resultSb.append(byteToHexString(b[i]));
		}
		return resultSb.toString();
	}

	/**
	 * 将字节转化为16进制字符
	 * 
	 * @param b
	 *            字节
	 * @return 字节对应的16进制字符
	 */
	private static String byteToHexString(byte b) {

		int n = b;
		if (n < 0)
			n = 256 + n;
		int d1 = n / 16;
		int d2 = n % 16;
		return hexDigits[d1] + hexDigits[d2];
	}

	/**
	 * 对内容进行MD5加密
	 * 
	 * @param origin
	 *            要加密的数据
	 * @return MD5加密后的内容
	 */
	public static String MD5Encode(String origin) {
		String resultString = null;
		try {
			resultString = new String(origin);
			MessageDigest md = MessageDigest.getInstance("MD5");
			resultString = byteArrayToHexString(md.digest(resultString
					.getBytes()));
		} catch (Exception e) {
			logger.debug(e.getMessage(), e);
			throw new RuntimeException(e);
		}
		return resultString;
	}

	/**
	 * 生成随机密码
	 * 
	 * @param pwd_len
	 * @return
	 */
	public static String genPassword(int pwd_len) {
		// 35是因为数组是从0开始的，26个字母+10个数字
		final int maxNum = 10;
		int i; // 生成的随机数
		int count = 0; // 生成的密码的长度
		char[] str = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
		StringBuffer pwd = new StringBuffer("");
		Random r = new Random();
		while (count < pwd_len) {
			// 生成随机数，取绝对值，防止生成负数，
			i = Math.abs(r.nextInt(maxNum)); // 生成的数最大为36-1
			if (i >= 0 && i < str.length) {
				pwd.append(str[i]);
				count++;
			}
		}
		return pwd.toString();
	}
	
	public static void main(String[] args) {
	System.out.println(MD5.MD5Encode("888888"));	
	}

}